set(CPP23_SOURCES
    multidimensional_subscript.cpp
    if_consteval.cpp
    extended_attributes.cpp
    stacktrace.cpp
    explicit_object_parameter.cpp
    deducing_this.cpp
    auto_destructuring.cpp
    expected.cpp
    features.cpp
)

# 创建库（供其他项目使用）
add_library(cpp23_features_lib ${CPP23_SOURCES})
target_include_directories(cpp23_features_lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_compile_features(cpp23_features_lib PUBLIC cxx_std_23)

# C++23的stacktrace需要链接libstdc++的特殊支持（GCC 12+）
# 注意：GCC 12+需要链接libstdc++exp来支持stacktrace
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "12.0")
    # 对于GCC 12+，尝试链接stdc++exp库
    # 注意：在某些系统上库名可能是libstdc++exp.so
    find_library(STACKTRACE_LIB 
      NAMES stdc++exp libstdc++exp
      PATHS /usr/lib /usr/lib/x86_64-linux-gnu /usr/local/lib
    )
    if(STACKTRACE_LIB)
      target_link_libraries(cpp23_features_lib PUBLIC ${STACKTRACE_LIB})
      message(STATUS "找到stacktrace库: ${STACKTRACE_LIB}")
    else()
      # 如果找不到，尝试直接链接（库可能在标准路径中）
      target_link_libraries(cpp23_features_lib PUBLIC stdc++exp)
      message(STATUS "尝试链接stdc++exp库（如果链接失败，请安装libstdc++-exp包）")
    endif()
  endif()
endif()

# std::expected在GCC 13中应该已经支持
# 如果编译失败，可能需要检查编译器版本和标准库版本
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "13.0")
    message(WARNING "GCC ${CMAKE_CXX_COMPILER_VERSION} 可能不完全支持std::expected，建议使用GCC 13+")
  endif()
endif()

# 创建可执行文件
add_executable(cpp23_features main.cpp)
target_include_directories(cpp23_features PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_compile_features(cpp23_features PUBLIC cxx_std_23)
target_link_libraries(cpp23_features PUBLIC cpp23_features_lib)

# 链接stacktrace库（可执行文件也需要）
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "12.0")
    if(STACKTRACE_LIB)
      target_link_libraries(cpp23_features PUBLIC ${STACKTRACE_LIB})
    else()
      target_link_libraries(cpp23_features PUBLIC stdc++exp)
    endif()
  endif()
endif()

# 为了向后兼容，创建别名
add_library(cpp23_features ALIAS cpp23_features_lib) 